/*
 * @lc app=leetcode.cn id=69 lang=java
 *
 * [69] x 的平方根
 *
 * https://leetcode-cn.com/problems/sqrtx/description/
 *
 * algorithms
 * Easy (36.57%)
 * Likes:    206
 * Dislikes: 0
 * Total Accepted:    48.5K
 * Total Submissions: 132.5K
 * Testcase Example:  '4'
 *
 * 实现 int sqrt(int x) 函数。
 * 
 * 计算并返回 x 的平方根，其中 x 是非负整数。
 * 
 * 由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
 * 
 * 示例 1:
 * 
 * 输入: 4
 * 输出: 2
 * 
 * 
 * 示例 2:
 * 
 * 输入: 8
 * 输出: 2
 * 说明: 8 的平方根是 2.82842..., 
 * 由于返回类型是整数，小数部分将被舍去。
 * 
 * 
 */
class Solution {
    public int mySqrt(int x) {
        if (x < 2) {
            return x;
        }

        long max = x;
        long min = 0;
        long v;
        while (true) {
            v = (max + min) / 2;
            if (v * v <= (long) x && (v + 1) * (v + 1) > (long) x) {
                return (int) v;
            }
            if (v * v > (long) x) {
                max = v;
            } else {
                min = v;
            }
        }
    }
}

